স্প্রিং বুট এবং JPA (Java Persistence API) বিভিন্ন ধরণের ইনহেরিটেন্স স্ট্র্যাটেজি প্রদান করে। ইনহেরিটেন্স স্ট্র্যাটেজি ডেটাবেসে অবজেক্ট-ওরিয়েন্টেড সম্পর্ককে টেবিল ফর্ম্যাটে মানচিত্র করতে সাহায্য করে। JPA তিনটি প্রধান ইনহেরিটেন্স স্ট্র্যাটেজি প্রদান করে:
- Table-per-Class
- Single Table
- Joined Table
Table-per-Class Strategy
সংজ্ঞা
এই স্ট্র্যাটেজিতে প্রতিটি ক্লাসের জন্য একটি স্বতন্ত্র টেবিল তৈরি করা হয়। বেস ক্লাস এবং ডেরাইভড ক্লাসের ডেটা আলাদাভাবে সংরক্ষণ করা হয়।
বৈশিষ্ট্য
- প্রতিটি ক্লাসের জন্য আলাদা টেবিল।
- ডেটাবেসে সম্পর্কিত ডেটা রাখতে দ্রুত এবং সহজ।
- ডুপ্লিকেট কলাম থাকতে পারে।
কনফিগারেশন
Inheritance Type: InheritanceType.TABLE_PER_CLASS
উদাহরণ
import jakarta.persistence.*;
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Vehicle {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
// Getters and Setters
}
@Entity
public class Car extends Vehicle {
private int seatingCapacity;
// Getters and Setters
}
@Entity
public class Bike extends Vehicle {
private boolean hasCarrier;
// Getters and Setters
}
টেবিল গঠন
- Car Table:
id,name,seatingCapacity - Bike Table:
id,name,hasCarrier
Single Table Strategy
সংজ্ঞা
এই স্ট্র্যাটেজিতে সমস্ত ক্লাসের ডেটা একটি টেবিলে রাখা হয়। টেবিলটি একটি discriminator column ব্যবহার করে ডেটা আলাদা করে।
বৈশিষ্ট্য
- ডেটার জন্য শুধুমাত্র একটি টেবিল।
- স্টোরেজ দক্ষ।
- বড় টেবিলে অনেক নাল ভ্যালু থাকতে পারে।
কনফিগারেশন
Inheritance Type: InheritanceType.SINGLE_TABLE
উদাহরণ
import jakarta.persistence.*;
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "vehicle_type", discriminatorType = DiscriminatorType.STRING)
public abstract class Vehicle {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
// Getters and Setters
}
@Entity
@DiscriminatorValue("CAR")
public class Car extends Vehicle {
private int seatingCapacity;
// Getters and Setters
}
@Entity
@DiscriminatorValue("BIKE")
public class Bike extends Vehicle {
private boolean hasCarrier;
// Getters and Setters
}
টেবিল গঠন
- Vehicle Table:
id,name,vehicle_type,seatingCapacity,hasCarrier
Joined Table Strategy
সংজ্ঞা
এই স্ট্র্যাটেজিতে প্রতিটি ক্লাসের জন্য আলাদা টেবিল থাকে, তবে তাদের মধ্যে সম্পর্ক গঠন করার জন্য JOIN অপারেশন ব্যবহৃত হয়।
বৈশিষ্ট্য
- সম্পর্কিত ডেটা সংরক্ষণের জন্য কার্যকর।
- ডেটার রিডন্ডেন্সি (Redundancy) কম।
- কোয়েরির সময় জয়েন অপারেশন করার প্রয়োজন হয়।
কনফিগারেশন
Inheritance Type: InheritanceType.JOINED
উদাহরণ
import jakarta.persistence.*;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Vehicle {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
// Getters and Setters
}
@Entity
public class Car extends Vehicle {
private int seatingCapacity;
// Getters and Setters
}
@Entity
public class Bike extends Vehicle {
private boolean hasCarrier;
// Getters and Setters
}
টেবিল গঠন
- Vehicle Table:
id,name - Car Table:
id,seatingCapacity - Bike Table:
id,hasCarrier
পার্থক্য
| বৈশিষ্ট্য | Table-per-Class | Single Table | Joined Table |
|---|---|---|---|
| সংরক্ষণ কৌশল | প্রতিটি ক্লাসের জন্য আলাদা টেবিল | একক টেবিলে সমস্ত ডেটা | সম্পর্কিত টেবিল ব্যবহার |
| ডেটার অখণ্ডতা | কম | কম | বেশি |
| স্টোরেজ দক্ষতা | কম | বেশি | মাঝারি |
| কোয়েরি জটিলতা | কম | সহজ | বেশি |
| নাল ভ্যালু সমস্যা | না | হ্যাঁ | না |
সারাংশ
Spring Boot এবং JPA-তে Table-per-Class, Single Table, এবং Joined Table ইনহেরিটেন্স স্ট্র্যাটেজি ব্যবহার করে ডেটাবেস সম্পর্ক গঠন এবং ডেটা সংরক্ষণ করা যায়। প্রতিটি স্ট্র্যাটেজির নিজস্ব সুবিধা এবং সীমাবদ্ধতা রয়েছে। আপনার প্রয়োজন অনুসারে স্ট্র্যাটেজি বেছে নেওয়া উচিত।